package com.whc.gulimall.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.whc.common.utils.PageUtils;
import com.whc.gulimall.product.entity.AttrGroupEntity;
import com.whc.gulimall.product.vo.AttrAttrGroupRelationVo;
import com.whc.gulimall.product.vo.AttrGroupWithAttrsVo;
import com.whc.gulimall.product.vo.SpuItemAttrGroup;

import java.util.List;
import java.util.Map;

/**
 * 属性分组
 *
 * @author wanghaochen
 * @email angaoen@outlook.com
 * @date 2022-03-05 00:18:53
 */
public interface AttrGroupService extends IService<AttrGroupEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 获取分页列表
     *
     * @param params 参数
     * @param catId  分类id
     * @return 封装好的分页数据
     */
    PageUtils queryPage(Map<String, Object> params, Long catId);

    /**
     * 通过id获取到分组属性
     *
     * @param attrGroupId 分组id
     * @return 获取数据
     */
    AttrGroupEntity getInfoById(Long attrGroupId);

    /**
     * 根据attrId和attrGroupId移除数据
     *
     * @param deleteVos 封装好的数据集合
     */
    void removeAttrGroupByAttrIdsAndAttrGroupIds(List<AttrAttrGroupRelationVo> deleteVos);

    /**
     * 获取属性分组没有关联的其他属性
     *
     * @param params      参数
     * @param attrgroupId 分组id
     * @return 分页数据
     */
    PageUtils getNoRelationAttr(Map<String, Object> params, Long attrgroupId);

    /**
     * 添加属性与分组关联关系
     *
     * @param relationVos 关系列表
     */
    void saveAttrRelation(List<AttrAttrGroupRelationVo> relationVos);

    /**
     * 获取分类下所有分组&关联属性
     *
     * @param catelogId 三级分类id
     * @return vo
     */
    List<AttrGroupWithAttrsVo> getAttrGroupWithAttrByCatelogId(Long catelogId);

    /**
     * 根据分组id删除分组
     *
     * @param attrGroupIds id列表
     */
    void deleteAttrGroupByIds(List<Long> attrGroupIds);

    /**
     * 通过分类id和spuId获取属性规格参数列表
     *
     * @param catalogId 分类id
     * @param spuId     spuId
     * @return 属性规格参数列表
     */
    List<SpuItemAttrGroup> listAttrGroupByCatelogAndSpuId(Long catalogId, Long spuId);
}

